/**
 * 工具函数集合
 */

/**
 * 格式化文件大小
 * @param {number} bytes - 字节数
 * @returns {string} 格式化后的大小
 */
export function formatFileSize(bytes) {
  if (bytes === 0) return '0 Bytes'
  
  const k = 1024
  const sizes = ['Bytes', 'KB', 'MB', 'GB']
  const i = Math.floor(Math.log(bytes) / Math.log(k))
  
  return Math.round(bytes / Math.pow(k, i) * 100) / 100 + ' ' + sizes[i]
}

/**
 * 验证图片文件
 * @param {File} file - 文件对象
 * @returns {Object} 验证结果
 */
export function validateImageFile(file) {
  const maxSize = 10 * 1024 * 1024 // 10MB
  const allowedTypes = ['image/jpeg', 'image/jpg', 'image/png', 'image/webp']
  
  if (!file) {
    return { valid: false, error: '请选择文件' }
  }
  
  if (!allowedTypes.includes(file.type)) {
    return { valid: false, error: '不支持的文件格式，请上传JPG、PNG或WebP图片' }
  }
  
  if (file.size > maxSize) {
    return { valid: false, error: `文件大小不能超过${formatFileSize(maxSize)}` }
  }
  
  return { valid: true }
}

/**
 * 生成唯一ID
 * @returns {string} 唯一ID
 */
export function generateUniqueId() {
  return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`
}

/**
 * 延迟函数
 * @param {number} ms - 毫秒数
 * @returns {Promise}
 */
export function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms))
}

/**
 * 下载文件
 * @param {string} url - 文件URL
 * @param {string} filename - 文件名
 */
export async function downloadFile(url, filename) {
  try {
    const response = await fetch(url)
    const blob = await response.blob()
    const link = document.createElement('a')
    link.href = window.URL.createObjectURL(blob)
    link.download = filename
    link.click()
    window.URL.revokeObjectURL(link.href)
  } catch (error) {
    console.error('下载失败:', error)
    throw error
  }
}

/**
 * 格式化价格
 * @param {number} price - 价格
 * @returns {string} 格式化后的价格
 */
export function formatPrice(price) {
  return `¥${price.toFixed(2)}`
}

/**
 * 获取材质显示名称
 * @param {string} material - 材质代码
 * @returns {string} 显示名称
 */
export function getMaterialName(material) {
  const materials = {
    pla: 'PLA塑料',
    abs: 'ABS塑料',
    resin: '树脂',
    metal: '金属'
  }
  return materials[material] || material
}

/**
 * 获取尺寸显示名称
 * @param {string} size - 尺寸代码
 * @returns {string} 显示名称
 */
export function getSizeName(size) {
  const sizes = {
    small: '小号',
    medium: '中号',
    large: '大号',
    xlarge: '加大号'
  }
  return sizes[size] || size
}

